package com.tankwar.view.domain;

import com.tankwar.core.Arena;
import com.tankwar.core.EventAble;
import com.tankwar.view.enums.Tanks;

import javafx.scene.input.KeyEvent;

/**
 * 玩家坦克
 * 
 * @author lifeng
 * @date 2020年4月19日 下午11:12:24
 */
public class PlayerTank extends Tank implements EventAble {

	/**
	 * 按键是否按下标志，左侧单词是按键名
	 */
	private boolean j_key, k_key, s_key, w_key, a_key, d_key;

	/**
	 * 创建玩家坦克
	 * 
	 * @param type 坦克类型
	 */
	public PlayerTank(Tanks type, Arena arena, Map map) {
		super(type, arena, map);
	}

	/**
	 * 处理
	 */
	@Override
	public void onKeyPressed(KeyEvent event) {
		// 判断按下的按键值
		switch (event.getCode()) {
		case W:
			w_key = true;// “W”按下标志为true
			// a_key = false;// “A”按下标志为false
			// s_key = false;// “S”按下标志为false
			// d_key = false;// “D”按下标志为false
			break;
		case A:
			// w_key = false;// “W”按下标志为true
			a_key = true;// “A”按下标志为false
			// s_key = false;// “S”按下标志为false
			// d_key = false;// “D”按下标志为false
			break;
		case S:
			// w_key = false;// “W”按下标志为true
			// a_key = false;// “A”按下标志为false
			s_key = true;// “S”按下标志为false
			// d_key = false;// “D”按下标志为false
			break;
		case D:
			// w_key = false;// “W”按下标志为true
			// a_key = false;// “A”按下标志为false
			// s_key = false;// “S”按下标志为false
			d_key = true;// “D”按下标志为false
			break;
		case J:
			j_key = true;// “J”按下标志为true
			break;
		case K:
			k_key = true;// “Y”按下标志为true
			break;
		default:
			break;
		}

		// 改变方项
		this.turnDirection();
	}

	@Override
	public void onKeyReleased(KeyEvent event) {

		// 判断按下的按键值
		switch (event.getCode()) {
		case W:
			w_key = false;// “W”按下标志为true
			// a_key = false;// “A”按下标志为false
			// s_key = false;// “S”按下标志为false
			// d_key = false;// “D”按下标志为false
			break;
		case A:
			// w_key = false;// “W”按下标志为true
			a_key = false;// “A”按下标志为false
			// s_key = false;// “S”按下标志为false
			// d_key = false;// “D”按下标志为false
			break;
		case S:
			// w_key = false;// “W”按下标志为true
			// a_key = false;// “A”按下标志为false
			s_key = false;// “S”按下标志为false
			// d_key = false;// “D”按下标志为false
			break;
		case D:
			// w_key = false;// “W”按下标志为true
			// a_key = false;// “A”按下标志为false
			// s_key = false;// “S”按下标志为false
			d_key = false;// “D”按下标志为false
			break;
		case J:
			j_key = false;// “Y”按下标志为false
			break;
		case K:
			k_key = false;// “Y”按下标志为false
			break;
		default:
			break;
		}

		// 改变方项
		this.turnDirection();
	}

	/**
	 * 改变方向
	 */
	private void turnDirection() {
		if (w_key) {
			this.turnUp();
		} else if (a_key) {
			this.turnLeft();
		} else if (s_key) {
			this.turnDown();
		} else if (d_key) {
			this.turnRight();
		}
	}

	/**
	 * 定时刷数据
	 */
	@Override
	public void update() {
		this.moving = w_key || a_key || s_key || d_key;
		super.update();
	}

	/**
	 * 玩家坦克可以让地图移动
	 */
	@Override
	protected void move() {

		// 是否可以移动
		if (!this.moving) {
			return;
		}

		// 移动到这一点
		Point rect = this.moveTo();

		// 边界检查
		if (!this.arena.contain(rect.getX(), rect.getY(), this.getWidth(), this.getHeight())) {
			this.map.move(rect.getOffsetX(), rect.getOffsetY());
			return;
		}

		// 移动
		this.moveTo(rect.getX(), rect.getY());
	}
}
